<?php
 
 /*
   选择排序
   首先在未排序序列中找到最小元素,最小元素和开始对比的数字交换位置,存放到排序序列的起始位置，
   比较的轮数=count($arr)-1
   url:https://www.cnblogs.com/bigdata-stone/p/10464451.html #选择排序
  */

  //选择排序
 //实现思路 双重循环完成，外层控制轮数，当前的最小值。内层控制比较次数
 $arr = [1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39, 2];
 //选择排序
 //实现思路 双重循环完成，外层控制轮数，当前的最小值。内层控制比较次数
 function selectSort($arr) {

    $len = count($arr);

    //$i 当前最小值的位置， 需要参与比较的元素
    for ($i = 0; $i < $len - 1; $i++) {
        //先假设最小的值的位置
        $p = $i;
        //$j 当前都需要和哪些元素比较，$i 后边的。
        for ($j = $i + 1; $j < $len; $j++) {
            //$arr[$p] 是 当前已知的最小值
            //比较，发现更小的,记录下最小值的位置；并且在下次比较时，应该采用已知的最小值进行比较。
            $p = ($arr[$p] <= $arr[$j]) ? $p : $j;
        }

        //已经确定了当前的最小值的位置，保存到$p中。
        //如果发现 最小值的位置与当前假设的位置$i不同，则位置互换即可
        if ($p != $i) {
            $tmp     = $arr[$p];
            $arr[$p] = $arr[$i];
            $arr[$i] = $tmp;
        }
    }
    //返回最终结果
    return $arr;
 }

 $arr = selectSort($arr);
 echo "<pre>";
 print_r($arr);







